package com.shanjupay.paymentagent.impl;

import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeWapPayModel;
import com.alipay.api.request.AlipayTradeWapPayRequest;
import com.alipay.api.response.AlipayTradeWapPayResponse;
import com.shanjupay.paymentagent.api.conf.AliConfigParam;
import com.shanjupay.paymentagent.api.dto.AlipayBean;
import com.shanjupay.paymentagent.api.dto.PaymentResponseDTO;
import com.shanjupay.paymentagent.api.service.IPayChannelAgentService;
import com.zpark.jushanpay.common.domain.BusinessException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.PrintWriter;

@Service
public class PayChannelAgentServiceImpl implements IPayChannelAgentService {


    /**
     * 调用支付宝手机WAP下单接口
     * @param aliConfigParam 支付渠道参数
     * @param alipayBean 请求支付参数
     * @return
     * @throws BusinessException
     */
    public PaymentResponseDTO createPayOrderByAliWAP(AliConfigParam aliConfigParam,
                               AlipayBean alipayBean) throws BusinessException {
        // 1、创建支付宝客户端对象
        DefaultAlipayClient alipayClient = new DefaultAlipayClient(
                aliConfigParam.getUrl(),
                aliConfigParam.getAppId(),
                aliConfigParam.getRsaPrivateKey(),
                aliConfigParam.getFormat(),
                aliConfigParam.getCharset(),
                aliConfigParam.getAlipayPublicKey(),
                aliConfigParam.getSignType()
        );
        // 2、创建支付宝请求对象
        AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
        // 设置同步回调地址
        request.setReturnUrl(aliConfigParam.getReturnUrl());
        // 设置异步回调地址
        request.setNotifyUrl(aliConfigParam.getNotifyUrl());

        // 3、创建支付宝请求参数封装对象
        AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();

        // 4、设置支付宝请求参数
        // 订单号
        model.setOutTradeNo(alipayBean.getOutTradeNo());
        // 金额
        model.setTotalAmount(alipayBean.getTotalAmount());
        // 订单标题
        model.setSubject(alipayBean.getSubject());
        // 用户取消支付回调
        // model.setQuitUrl("https://310dx2074ys0.vicp.fun/h5/quit_pay");

        // 设置交易方式编码  手机网站支付固定值
        model.setProductCode("QUICK_WAP_WAY");

        // 设置商品描述信息
        model.setBody(alipayBean.getBody());

        // 订单过期时间
        model.setTimeoutExpress(alipayBean.getExpireTime());

        // 将请求参数添加到请求对象当中
        request.setBizModel(model);

        // 5、调用支付宝客户端对象发送请求
        String resultForm = "";
        try {
            // 调用支付宝客户端发起请求
            AlipayTradeWapPayResponse resp = alipayClient.pageExecute(request);

            // 创建支付返回结果对象
            PaymentResponseDTO responseDTO = new PaymentResponseDTO();

            // 6、获取请求结果
            resultForm = resp.getBody();

            // 封装响应结果
            responseDTO.setContent(resultForm);

            return responseDTO;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
